package com.leetcode.www;

/**
 * Creared with IntelliJ IDEA.
 * Description:
 给定一个正整数 n，找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1，返回 0 。

 如果只有 0 将两个 1 分隔开（可能不存在 0 ），则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如，"1001" 中的两个 1 的距离为 3
 * User:yxd
 * Date:2022-04-24
 * Time:13:35
 */
public class Everyday868 {
    public int binaryGap(int n) {//位运算
        int last = -1, ans = 0;
        for (int i = 0; n != 0; ++i) {
            if ((n & 1) == 1) {//此二进制为1
                if (last != -1) {
                    ans = Math.max(ans, i - last);//最大间距
                }
                last = i;//上一次出现1的位置
            }
            n >>= 1;
        }
        return ans;
    }

    public int binaryGap1(int n) {
        String s = Integer.toBinaryString(n);
        int i = 0;
        int j = 0;
        int max = 0;
        while(i < s.length()){
            j = i;
            while(i < s.length() && s.charAt(i) != '1'){
                i ++;
            }
            if(i < s.length()){
                max = Math.max(max,i - j);


            }else{
                break;
            }

            j = i;
            i ++;

            while(i < s.length() && s.charAt(i) != '1'){
                i ++;
            }
            if(i < s.length()){
                max = Math.max(max,i - j);


            }else{
                break;
            }

        }
        return max;
    }
}
